package cn.memorynine.common.service;//package com.yneusoft.common.service;
//
//import cn.hutool.core.util.IdUtil;
//import com.aliyun.oss.OSS;
//import com.aliyun.oss.OSSClientBuilder;
//import com.aliyun.oss.model.CannedAccessControlList;
//import com.aliyun.oss.model.SetObjectAclRequest;
//import com.yneusoft.common.enums.ResultEnum;
//import com.yneusoft.common.model.BusinessException;
//import com.yneusoft.common.model.UploadFileModel;
//import com.yneusoft.dao.entity.SystemFile;
//import com.yneusoft.dao.mapper.SystemFileMapper;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//import org.springframework.web.multipart.MultipartFile;
//
//import java.io.IOException;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * oss对象存储服务
// * @author 王加雷
// */
//@Slf4j
//@Service
//public class PublicOssService {
//    @Value("${aliyun.oss.endpoint}")
//    private String endpoint;
//
//    @Value("${aliyun.accessKeyId}")
//    private String accessKeyId;
//
//    @Value("${aliyun.accessKeySecret}")
//    private String accessKeySecret;
//
//    @Value("${aliyun.oss.bucketName}")
//    private String bucketName;
//
//    @Autowired
//    private SystemFileMapper systemFileMapper;
//
//    /**
//     * 上传私有文件到阿里云oss
//     * @param multipartFile 文件对象
//     * @return filePath:文件url、fileCode文件code
//     */
//    public UploadFileModel uploadFile(MultipartFile multipartFile) {
//        //初始化阿里云存储对象
//        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//        String fileCode = "";
//        String filePath = "";
//        //上传byte数组
//        try {
//            //准备文件名称
//            String fileName = IdUtil.simpleUUID() + multipartFile.getOriginalFilename();
//            //上传文件
//            ossClient.putObject(bucketName, fileName, multipartFile.getInputStream());
//
//            //如果文件是私有文件，则生成永久链接，不在存储到数据库中
//            fileCode = IdUtil.simpleUUID();
//            //获得一个小时内有效的数据
//            //过期时间：1小时
//            Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
//            filePath = ossClient.generatePresignedUrl(bucketName, fileName, expiration).toString();
//            //在文件编码表中新增数据
//            SystemFile systemFile = new SystemFile();
//            systemFile.setCode(fileCode);
//            systemFile.setPath(fileName);
//            systemFileMapper.insert(systemFile);
//            ossClient.shutdown();
//        } catch (IOException e) {
//            ossClient.shutdown();
//            e.printStackTrace();
//            log.error("文件上传失败{}", multipartFile.getName());
//            throw new BusinessException(ResultEnum.FILE_ERROR);
//        }
//
//        //准备结果
//        UploadFileModel uploadFileModel = new UploadFileModel();
//        uploadFileModel.setFileCode(fileCode);
//        uploadFileModel.setFilePath(filePath);
//
//        return uploadFileModel;
//    }
//
//    /**
//     * 上传文件到阿里云oss
//     * @param multipartFile 文件对象
//     * @param isPrivate 是否私有对象：否表示获得的url链接永久有效
//     * @return filePath:文件url、fileCode文件code
//     */
//    @Transactional(rollbackFor = Exception.class)
//    public Map<String, Object> uploadFile(MultipartFile multipartFile, Boolean isPrivate) {
//        //初始化阿里云存储对象
//        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//        String fileCode = "";
//        String filePath = "";
//        //上传byte数组
//        try {
//            //准备文件名称
//            String fileName = IdUtil.simpleUUID() + "." + multipartFile.getOriginalFilename();
//            //上传文件
//            ossClient.putObject(bucketName, fileName, multipartFile.getInputStream());
//
//            //如果文件是私有文件，则生成永久链接，不在存储到数据库中
//            if(isPrivate) {
//                //设置文件权限为公共读
//                SetObjectAclRequest setObjectAclRequest = new SetObjectAclRequest(bucketName, fileName, CannedAccessControlList.PublicRead);
//                ossClient.setObjectAcl(setObjectAclRequest);
//                filePath = "https://" + bucketName + "." + endpoint + "/" + fileName;
//            }else {
//                fileCode = IdUtil.simpleUUID();
//                //获得一个小时内有效的数据
//                //过期时间：1小时
//                Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
//                filePath = ossClient.generatePresignedUrl(bucketName, fileName, expiration).toString();
//                //在文件编码表中新增数据
//                SystemFile systemFile = new SystemFile();
//                systemFile.setCode(fileCode);
//                systemFile.setPath(fileName);
//                systemFileMapper.insert(systemFile);
//            }
//
//            ossClient.shutdown();
//        } catch (IOException e) {
//            ossClient.shutdown();
//            e.printStackTrace();
//            log.error("文件上传失败{}", multipartFile.getName());
//            throw new BusinessException(ResultEnum.FILE_ERROR);
//        }
//
//        //准备结果
//        Map<String, Object> result = new HashMap<>();
//        result.put("fileCode", fileCode);
//        result.put("filePath", filePath);
//
//        return result;
//    }
//
//    /**
//     * 根据文件编码获得文件URL
//     * @param fileCode 文件编码
//     * @return 文件url
//     */
//    public String getFileUrl(String fileCode) {
//        //1. 从数据库中获得文件名称
//        SystemFile systemFile = systemFileMapper.selectById(fileCode);
//        if(systemFile == null) {
//            return "";
//        }
//        //2. 根据文件名称从oss中获得1小时的访问链接
//        else {
//            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//            Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
//            return ossClient.generatePresignedUrl(bucketName, systemFile.getPath(), expiration).toString();
//        }
//
//    }
//}
